import { reqCartList, reqDeleteCartById, reqUpdateCheckedById } from '@/api'
const state = {
    cartList: []
}
const mutations = {
    GETCARLIST(state, cartList) {
        state.cartList = cartList
    }
}
const actions = {
    //获取购物车列表数据
    async getCartList({ commit }) {
        let result = await reqCartList()
        //返回结果数据为空，因为服务器不知道who are you?
        //因此我们需要在发送请求前的请求拦截器中添加请求头userTempId
        if (result.code === 200) {
            commit('GETCARLIST', result.data)
        }
    },
    //删除购物某个产品
    async deleteCartListBySkuId({ commit }, skuId) {
        let result = await reqDeleteCartById(skuId)
        //返回数据是null，不需要三连环修改数据
        //但我需要通知组件该请求是否成功
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    //修改购物车某个产品的选中状态
    async updateCheckedById({ commit }, { skuId, isChecked }) {
        let result = await reqUpdateCheckedById(skuId, isChecked)
        //告诉服务器求改isChecked的值，没有返回数据，不需要三连环
        if (result.code === 200) {
            return "ok"
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    //删除全部勾选的产品
    deleteAllCheckedCart({ dispatch, getters }) {
        //我们没有一次删除全部产品的接口，只有一次删一个产品的方法deleteCartListBySkuId
        //调用多次deleteCartListBySkuId
        //context:小仓库，commit【提交给mutation修改参数】 getters【计算属性】  state【当前仓库数据】
        // 创建一个新数组
        let PromiseAll = []
        //获取购物车中全部的产品（是一个数组）
        getters.cartList.cartInfoList.forEach(item => {
            //删除改商品  
            let promise = item.isChecked == 1 ? dispatch('deleteCartListBySkuId', item.skuId) : ''
            //返回结果是promise
            //将每一次返回的Promise添加到数组中
            PromiseAll.push(promise)
        });
        // 如果PromiseAll数组中的每个promise对象都是成功的，返回成功的promise
        // 如果有一个失败，返回的是失败promise
        return Promise.all(PromiseAll)
    },
    //删除全部商品
    deleteAllCart({dispatch,getters}) {
        let PromiseAll = []
        getters.cartList.cartInfoList.forEach(item => {
            //删除该商品  
            let promise = dispatch('deleteCartListBySkuId', item.skuId)
            //返回结果是promise
            //将每一次返回的Promise添加到数组中
            PromiseAll.push(promise)
        });
        return Promise.all(PromiseAll)
    },
    //修改全部产品的勾选框状态
    updateAllCartIsChecked({ dispatch, state }, isChecked) {
        let PromiseAll=[]
        state.cartList[0].cartInfoList.forEach(item => {
            let promise = dispatch('updateCheckedById', { skuId: item.skuId, isChecked })
            PromiseAll.push(promise)
        })
        return Promise.all(PromiseAll)
        // return 'ok'
    }
}
const getters = {
    cartList(state) {
        return state.cartList[0] || {}
    },
}

export default {
    state,
    mutations,
    actions,
    getters,
}